package net.tngou.quartz;

import java.io.File;
import java.util.Date;




import org.apache.commons.configuration2.PropertiesConfiguration;
import org.apache.commons.configuration2.builder.fluent.Configurations;
import org.apache.commons.configuration2.ex.ConfigurationException;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import static org.quartz.TriggerBuilder.newTrigger;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import static org.quartz.CronScheduleBuilder.dailyAtHourAndMinute;
import static org.quartz.JobBuilder.newJob;


public class JobManager
{
	private static Logger _log = LoggerFactory.getLogger(JobManager.class);
	private static PropertiesConfiguration quartzProperties;
	private static Scheduler sched ;
	
	
	
	public void run() throws SchedulerException  
	{
		
		try {
			 File propertiesFile = new File("quartz.properties");
			  Configurations configs = new Configurations();
			  quartzProperties = configs.properties(propertiesFile);
			
		} catch (ConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//创建一个简单的应用并且运行这个应用
		/**
		 * 一旦通过StdSchedulerFactory.getDefaultScheduler()获得一个scheduler ，那么应用将不会结束，
		 * 除非调用scheduler.shutdown()方法。
		 */
		sched = new StdSchedulerFactory().getScheduler();
		   _log.info("*********************启动应用*********************");
	        
		
       sched.start();
       _dayUpdategJob();
        /**
         * 关闭应用
         */
      //  sched.shutdown();
	}
	
	
	public static void shutdown() throws SchedulerException 
	{
		if(sched!=null) 
		{
			sched.shutdown();
			 _log.info("*********************关闭应用*********************");
		}
	}
	
	private void _dayUpdategJob() throws SchedulerException 
	{
		
		JobDetail job = newJob(DayUpdateJob.class)//要被执行的Java类。
                .withIdentity("DayUpdateJob")//名称
                .build();
		
		
        _log.info("*********************创建filterJob*********************");
//	    Date triggerStartTime = DateUtils.addMinutes(new Date(), 5);//xx分钟后执行
//			Trigger visitlogTrigger = newTrigger()
//	        		.withIdentity("saveJsonTrigger")
//	        		.withSchedule(CronScheduleBuilder.cronSchedule("0 0 01 * * ? "))
////	        		.withSchedule(simpleSchedule().
////	        				withIntervalInMinutes(10)//设置循环时间
////	        				.repeatForever()//指定触发器将无限期地重复。
////	        				)//设置循环时间
//	        		
//	        		.startAt(triggerStartTime)
//	        		.build();
        
			 CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("ProjectNewTrigger").withSchedule(CronScheduleBuilder.cronSchedule("0 0 1 * * ? ")).build();
		        //1.每日10点15分触发      0 15 10 ？* *
		        //2.每天下午的2点到2点59分（正点开始，隔5分触发）       0 0/5 14 * * ?
		        //3.从周一到周五每天的上午10点15触发      0 15 10 ? MON-FRI
		        //4.每月的第三周的星期五上午10点15触发     0 15 10 ? * 6#3
		        //5.2016到2017年每月最后一周的星期五的10点15分触发   0 15 10 ? * 6L 2016-2017
		        //Scheduler实例
		
	        sched.scheduleJob(job, cronTrigger);
	   
		
	}
	
	
}
